#include <string>
#include "gtest/gtest.h"
#include "Meetserie.h"


/*--------------------------------------------------------------*/
/*	handig weetje:												*/
/* 	ASSERT: Fails fast, aborting the current function.			*/
/*	EXPECT: Continues after the failure.						*/
 /*-------------------------------------------------------------*/

TEST(MeetserieLooseTests, test_construction_with_count)
{
	string naam = "Patrick van ieperen Meeting 23-02-2015";
	Meetserie m(naam);
	EXPECT_EQ(m.getNaam(),naam);
}

class TestMeetserie : public ::testing::Test
{
    protected:

		int cnt;
		int aantal;	
        TestMeetserie()
        {
            mExamplePtr = new Meetserie("test");   
        }

        virtual ~TestMeetserie()
        {
            delete mExamplePtr;
            mExamplePtr = NULL;
        }
        Meetserie* mExamplePtr;
		
		void vulMeetSerie()				// Omdat deze op meerder plaatsen wordt gebruikt een funtie van gemaakt.
		{
			mExamplePtr->voegToe(1);
			mExamplePtr->voegToe(1);
			mExamplePtr->voegToe(6);
			mExamplePtr->voegToe(1);
			mExamplePtr->voegToe(12);
			mExamplePtr->voegToe(1);
			mExamplePtr->voegToe(1);
			mExamplePtr->voegToe(2);
			mExamplePtr->voegToe(20);
			mExamplePtr->voegToe(2);
		}
};

TEST_F(TestMeetserie, NogplaatsInMeetserieNaCreatie)
{
    ASSERT_FALSE( mExamplePtr->isVol() );
}

TEST_F(TestMeetserie, isDeNaamCorrectNaCreatie)
{
	EXPECT_EQ(mExamplePtr->getNaam(), "test" );
}

TEST_F(TestMeetserie, veranderEnControleerNaamVanDeMeetSerie)
{
	string naam= "Motorway A2, exit 29" ;
	mExamplePtr-> setNaam( naam );
	EXPECT_EQ(mExamplePtr->getNaam(), naam);
}

TEST_F(TestMeetserie, controleerHoeveel_1_Ervoorkomen)
{
	ASSERT_FALSE( mExamplePtr->isVol() );
	if (!(mExamplePtr->isVol()))
	{
		vulMeetSerie();
	}	
	for ( int i=0; i < 10; i++)
	{
		if ( 1 == mExamplePtr->getMeetwaarde(i))
		{
			cnt++;
		}
	}
	EXPECT_EQ(cnt, 4);
	ASSERT_TRUE( mExamplePtr->isVol());
}


TEST_F(TestMeetserie, controleerHetaantalMeetingenInDeSerie )
{
	if (!(mExamplePtr->isVol()))
	{
		vulMeetSerie();
	}	
	mExamplePtr->bepAantalMeetwaarden(aantal);
	EXPECT_EQ(aantal, 10);
	ASSERT_TRUE( mExamplePtr->isVol());
}

TEST_F(TestMeetserie, checkIfSingleNumberIsOnCorrectPosition )
{
	// this test is only possible when 1 single number occures in the list.
	if (!(mExamplePtr->isVol()))
	{
		vulMeetSerie();
	}
	mExamplePtr->bepAantalMeetwaarden(aantal);
	for (int i =0; i < aantal; i++)
	{
		if( 20 ==mExamplePtr->getMeetwaarde(i))
		{
			EXPECT_EQ ( i , 8); // array starts counting at 0
		}
	}
	
}
